package com.sinogrand.elevator.utils

import android.content.Context
import android.util.Log
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

/**
 * 全局认证状态管理器
 * 管理应用的登录状态，提供全局的登录状态控制
 */
object AuthStateManager {
    
    // 登录状态流
    private val _isLoggedIn = MutableStateFlow(false)
    val isLoggedIn: StateFlow<Boolean> = _isLoggedIn.asStateFlow()
    
    // TokenManager实例
    private var tokenManager: TokenManager? = null
    
    /**
     * 初始化认证状态管理器
     */
    fun initialize(context: Context) {
        tokenManager = TokenManager(context)
        // 初始化时检查登录状态
        _isLoggedIn.value = tokenManager?.isLoggedIn() ?: false
        Log.d(LogTags.AUTH, "🔐 认证状态管理器初始化完成，当前状态: ${_isLoggedIn.value}")
    }
    
    /**
     * 执行登录
     */
    fun login() {
        _isLoggedIn.value = true
        Log.i(LogTags.AUTH, "✅ 用户登录成功")
    }
    
    /**
     * 执行退出登录
     */
    fun logout() {
        Log.i(LogTags.AUTH, "🚪 执行退出登录")
        tokenManager?.clearUserInfo()
        _isLoggedIn.value = false
        Log.i(LogTags.AUTH, "✅ 退出登录完成")
    }
    
    /**
     * 执行强制退出登录（用于401错误等场景）
     */
    fun forceLogout(reason: String = "未知原因") {
        Log.w(LogTags.AUTH, "🚪 执行强制退出登录 - 原因: $reason")
        tokenManager?.clearUserInfo()
        _isLoggedIn.value = false
        Log.w(LogTags.AUTH, "✅ 强制退出登录完成")
    }
    
    /**
     * 获取当前登录状态
     */
    fun getCurrentLoginState(): Boolean {
        return _isLoggedIn.value
    }
    
    /**
     * 获取TokenManager实例
     */
    fun getTokenManager(): TokenManager? {
        return tokenManager
    }
}
